package com.zhu.pre.mapper;

import com.sanploy.common.domain.Goods;
import com.sanploy.common.domain.vo.GoodsDetailVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * Created by zhu yingzhi on 2017/9/21.
 * @author yingzhi zhu
 * 手机商品数据库操作接口
 */
@Mapper
public interface MGoodsMapper {
    /**
     * 分页查找所有的商品 按时间排序
     * @param start 开始条数
     * @param pageSize 每页条目数
     * @return 商品实体集合
     */
    List<Goods> selectAllByPage(@Param("start") int start, @Param("end") int pageSize);

    /**
     * 分页查找所有的商品数量
     * @return 商品数量
     */
    int selectAllByPageCount();


    /**
     * 通过category（分类）分页查找所有的商品 按时间排序
     * @param catId 分类id
     * @param start 开始条数
     * @param pageSize 每页条目数
     * @return 商品实体集合
     */
    List<Goods> selectByCatIdPage(@Param("cat_id") Long catId, @Param("start") int start, @Param("end") int pageSize);
    /**
     * 通过category（分类）分页查找所有商品的数量
     * @param catId 分类id
     * @return 商品数量
     */
    int selectByCatIdPageCount(@Param("cat_id") Long catId);


    /**
     * 分页查找所有的热门商品 按热度排序
     * @param start 开始条数
     * @param pageSize 每页条目数
     * @return 商品实体集合
     */
    List<Goods> selectByHotPage(@Param("start") int start, @Param("end") int pageSize);
    /**
     * 分页查找所有的热门商品数量
     * @return 商品数量
     */
    int selectByHotPageCount();

    /**
     * 分页查找所有的精品商品 按精品度排序
     * @param start 开始条数
     * @param pageSize 每页条目数
     * @return 商品实体集合
     */
    List<Goods> selectByBestPage(@Param("start") int start, @Param("end") int pageSize);

    /**
     * 分页查找所有的精品商品数量
     * @return 商品数量
     */
    int selectByBestPageCount();

    /**
     * 通过id 查找商品
     * @param goodsId 商品id
     * @return 商品实体类
     */
    @Select("SELECT * FROM  goods WHERE id=#{goods_id}")
    Goods selectOne(@Param("goods_id") Long goodsId);

    /**
     * 通过商品id 查找商品的详情VO对象
     * @param id 商品id
     * @return 商品的详情VO对象
     */
    GoodsDetailVo getGoodsById(@Param("id") Long id);

    /**
     * 增加商品库存
     * @param number 减少数量
     * @param goodsId 商品id
     * @return 影响行数
     */
    @Update("UPDATE goods SET goods_number=goods_number+#{goods_number} WHERE id=#{id}")
    int restoreGoodsStock(@Param("goods_number") int number, @Param("id") Long goodsId);

    /**
     * 减少商品库存
     * @param number 减少数量
     * @param goodsId 商品id
     * @return 影响行数
     */
    @Update("UPDATE goods SET goods_number=goods_number-#{goods_number} WHERE id=#{id}")
    int reduceGoodsStock(@Param("goods_number") int number, @Param("id") Long goodsId);

    /**
     * 通过Id获取商品
     * @param list 商品Id list
     * @return 商品Vo对象
     */
    List<Goods> getGoodsByIdList(List<Long> list);
}
